# self指向
"""
在我们设计类方法的时候 self 通常是指向本身

但是这个时候如果一个类 被继承 了

那么继承这个子类, 在实例化后, 父类的self就是指向子类
"""
# class Parent():
#
#     def showName(self):
#         print(self.name)  # 实际上用的是子对象的name
#
#
# class Child(Parent):  # 继承方式就是在定义类的时候，在括号里写上需要继承的类
#
#     def __init__(self, name) -> None:
#         self.name = name
#
#
# child = Child('muzhou')
#
# child.showName()  # 调用的父类的方法

# 类初始化init函数

# class Parent():
#
#     def __init__(self, parentName) -> None:
#         self.parentName = parentName
#
#     def showParentName(self):
#         print(self.parentName)
#
#
# class Child(Parent):  # 继承方式就是在定义类的时候，在括号里写上需要继承的类
#
#     def __init__(self, childName, parentName) -> None:
#         super().__init__(parentName)
#         self.childName = childName
#
#
# child = Child('muzhou', 'muzhouParent')
#
# child.showParentName()  # 调用的父类的方法 报错啦

# 继承可以迭代
# class Grand():
#     a = 123
#
# class Parent(Grand):
#     ...
#
# class Child(Parent):
#     ...
#
# child = Child()
# print(child.zc)

# 继承可以怎么玩

class BWM():
    brand = "BMW"

    def func(self):
        print("宝马都有的功能")

    def face(self):
        print("宝马都有的大鼻孔")


class BWM5(BWM):
    height = 1400
    width = 4000
    price = '20w'

    def __init__(self, color) -> None:
        # super().__init__()
        self.color = color

    def func(self):
        super().func()
        print("BMW5特有的功能")



class BWM7(BWM):
    height = 2000
    width = 6000
    price = '30w'

    def __init__(self, color) -> None:
        # super().__init__()
        self.color = color

    def func(self):
        super().func()
        print("BMW7特有的功能")


bmw5 = BWM5('blue')
bmw7 = BWM7('blue')

print(f"我的牌子 {bmw5.brand}, 我的宽高 height: {bmw5.height} width: {bmw5.width}, 单价: {bmw5.price}")
bmw5.func()

print(f"我的牌子 {bmw7.brand}, 我的宽高 height: {bmw7.height} width: {bmw7.width}, 单价: {bmw7.price}")
bmw7.func()

bmw5.face()
bmw7.face()